package com.demo.java.OD601_650.OD623;

import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【打印机队列(A卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146884138
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 输入处理：读取任务数量
        int count = Integer.parseInt(in.nextLine());
        String[][] operations = new String[count][];

        // 读取所有操作
        for (int i = 0; i < count; i++) {
            String[] operation = in.nextLine().split(" ");
            operations[i] = operation;
        }

        // 打印机管理哈希表：每个打印机对应一个优先队列
        HashMap<String, PriorityQueue<int[]>> printers = new HashMap<>();

        int file_id = 1; // 任务ID从1开始
        for (int i = 0; i < count; i++) {
            String[] operation = operations[i];
            String type = operation[0];
            String printer_id = operation[1];

            if ("IN".equals(type)) {
                // 处理IN操作，将任务加入打印机的队列
                String priority = operation[2];
                int[] arr = {file_id, Integer.parseInt(priority), i}; // 保存任务ID、优先级和到达顺序
                printers.putIfAbsent(printer_id,
                        new PriorityQueue<>((a, b) -> a[1] != b[1] ? b[1] - a[1] : a[2] - b[2]));
                printers.get(printer_id).offer(arr); // 将任务插入队列
                file_id++; // 任务ID递增
            } else {
                // 处理OUT操作，输出任务ID或NULL
                if (!printers.containsKey(printer_id) || printers.get(printer_id).isEmpty()) {
                    System.out.println("NULL"); // 打印机队列为空
                } else {
                    int[] arr = printers.get(printer_id).poll(); // 取出队列中优先级最高的任务
                    if (arr != null) {
                        System.out.println(arr[0]); // 输出任务ID
                    } else {
                        System.out.println("NULL");
                    }
                }
            }
        }
    }
}